package com.example.BlockChain.dao;

import com.example.BlockChain.entity.TChainData;
import com.example.BlockChain.entity.TradeObject;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

@Repository
public interface TChainDataDao {
    public void save(TChainData tChainData);

    public List<TChainData> queryOrderByAddress(String address);

    public List<String> getCode(int type);//取得溯源码

    public void updateData(TradeObject tradeObject);

    public List<TChainData> getConOrders(String code);

    public List<TChainData> getMerandDelOrders(String code);
    public List<TChainData> getThreeOrders(String code);
    public void updateOperationType5(String orderid);
    public void updateOperationType4(String orderid);

    /**
     * 根据店铺名和操作类型查询订单
     *
     * @param operationTypes 操作类型列表
     * @return 订单列表
     */
    List<TChainData> getDeliveryOrdersByType(
            @Param("operationTypes") List<Integer> operationTypes);

    /**
     * 根据店铺名和操作类型查询订单
     *
     * @param storeName     店铺名
     * @param operationTypes 操作类型列表
     * @return 订单列表
     */
    List<TChainData> findOrdersByStoreAndType(
            @Param("storeName") String storeName,
            @Param("operationTypes") List<Integer> operationTypes);

    /**
     * 更新订单时间表的商家接单时间
     * @param orderId 订单ID（溯源码）
     * @param acceptTime 当前时间
     * @return 影响的行数
     */
    //@Update("UPDATE order_timings SET merchant_accept_time = #{acceptTime} WHERE order_id = #{orderId}")
    int updateMerchantAcceptTime(@Param("orderId") String orderId, @Param("acceptTime") LocalDateTime acceptTime);

    /**
     * 商家更新区块链信息表中的操作类型
     * @param orderId 订单ID（溯源码）
     * @param operationType 操作类型（2表示商家接单）
     * @return 影响的行数
     */
    // @Update("UPDATE blockchain_info SET operation_type = #{operationType} WHERE code = #{orderId}")
    int updateOperationType2(@Param("orderId") String orderId, @Param("operationType") int operationType);

    /**
     * 更新区块链操作类型
     *
     * @param orderId 订单ID
     * @param operationType 操作类型
     * @return 更新成功的行数
     */
    int updateOperationType3(@Param("orderId") String orderId, @Param("operationType") int operationType);


}
